class: middle, center # Biostatistics for Imaging Biomarkers & Introduction to Longitudinal Data Michael Donohue, PhD University of Southern California ### Biomarkers in Neurodegenerative Disorders University of Gothenburg May 26, 2021 .pull-left[ <img src="data:image/png;base64,#./images/atri.png" width="57%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="data:image/png;base64,#./images/actc_logo.png" width="47%" style="display: block; margin: auto;" /> ] --- # Session 2 Outline .large[ - Reference Regions - Centiloids - Standardization using the Empirical Cumulative Distribution Function (ECDF) - Intro to longitudinal data analysis - Summaries and plots - Regression - ANCOVA - Two-stage models ] --- class: inverse, middle, center # Reference Regions --- # Reference Regions .large[ A common issue with statistical analyses of numeric summaries derived from imaging data is normalization to a reference region. Examples: - Volumetric MRI: regional (e.g. hippocampal) volume relative to IntraCranial Volume (ICV) - Amyloid PET: cortical-to-cerebellum Standardized Uptake Value Ratio (SUVr) (Also an issue in non-imaging data, e.g. ratio of CSF `\(\textrm{A}\beta_{1-42}\)` to `\(\textrm{A}\beta_{1-40}\)`) ] --- # Beware the "Ratio Fallacy" and "Spurious Correlation" .large[ > Spurious correlation refers to the correlation between indices that have a common component. A 'per ratio' standard is based on a biological measurement adjusted for some physical measurement by division. Renowned statisticians and biologists (Pearson, Neyman and Tanner) have warned about the problems in interpretation that ratios cause. This warning has been largely ignored. The consequences of using a single ratio as either the dependent or one of the independent variables in a multiple-regression analysis are described. It is shown that the use of ratios in regression analyses can lead to incorrect or misleading inferences. A recommendation is made that the use of ratios in regression analyses be avoided. "Spurious correlation and the fallacy of the ratio standard revisited". *Journal of the Royal Statistical Society: Series A*. Examples abound: %ICV, SUVR, BMI, ... ] --- # Ratio as Dependent Variable in Regression ```r lm_fit1_gender <- lm(I(Hippocampus/ICV*100) ~ PTGENDER, data=dd2) ``` <table> <thead> <tr> <th style="text-align:left;"> Coefficient </th> <th style="text-align:right;"> Estimate </th> <th style="text-align:right;"> Std. Error </th> <th style="text-align:right;"> t value </th> <th style="text-align:left;"> Pr(>|t|) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:right;"> 0.51 </td> <td style="text-align:right;"> 0.00 </td> <td style="text-align:right;"> 129.8 </td> <td style="text-align:left;"> <0.001 </td> </tr> <tr> <td style="text-align:left;"> PTGENDERMale </td> <td style="text-align:right;"> -0.03 </td> <td style="text-align:right;"> 0.01 </td> <td style="text-align:right;"> -5.4 </td> <td style="text-align:left;"> <0.001 </td> </tr> </tbody> </table> - Signficant association between Gender and Hippocampal Volume (%ICV)! - (This linear model is essential just a two-sample t-test) - Model fit to ADNI CN --- # ICV as Covariate Instead of Denominator ```r lm_fit2_gender <- lm(Hippocampus ~ ICV + PTGENDER, data=dd2) ``` <table> <thead> <tr> <th style="text-align:left;"> Coefficient </th> <th style="text-align:right;"> Estimate </th> <th style="text-align:right;"> Std. Error </th> <th style="text-align:right;"> t value </th> <th style="text-align:left;"> Pr(>|t|) </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:right;"> 4363 </td> <td style="text-align:right;"> 433 </td> <td style="text-align:right;"> 10.07 </td> <td style="text-align:left;"> <0.001 </td> </tr> <tr> <td style="text-align:left;"> ICV </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 6.60 </td> <td style="text-align:left;"> <0.001 </td> </tr> <tr> <td style="text-align:left;"> PTGENDERMale </td> <td style="text-align:right;"> 60 </td> <td style="text-align:right;"> 94 </td> <td style="text-align:right;"> 0.64 </td> <td style="text-align:left;"> 0.52 </td> </tr> </tbody> </table> - No association between Gender and Hippocampal Volume ( `\(\text{mm}^3\)` )! - The **spurious association** in first model is driven by denominator (ICV), not numerator (hippocampal volume) --- # Hippocampus vs ICV and Gender .pull-leftWider[ <img src="data:image/png;base64,#imaging_fig/hipp_gender_scatter-1.svg" width="100%" style="display: block; margin: auto;" /> ] .pull-rightNarrower[ - For a given ICV, there is not much difference between genders - These linear fits are more flexible than model above (two slopes for ICV vs one) ] --- # Hippocampal volume ( `\(\textrm{mm}^3\)`, %ICV, and model-adjusted) <img src="data:image/png;base64,#imaging_fig/hipp_gender_box-1.svg" width="100%" style="display: block; margin: auto;" /> --- # Hippocampal volume ( `\(\textrm{mm}^3\)`, %ICV, and model-adjusted) .pull-leftWider[ <img src="data:image/png;base64,#imaging_fig/hipp_adj_gender_scatter-1.svg" width="100%" style="display: block; margin: auto;" /> ] .pull-rightNarrower[ - Model: .small[ `\(Y_i=\beta_0 + \beta_{\textrm{ICV}}\textrm{ICV}_i + \beta_{\textrm{Male}}\textrm{Male}_i + \varepsilon_i\)` ] - Adjusted volume: `\(Y_i - \hat{\beta}_{\textrm{ICV}}\textrm{ICV}_i\)` - Adjustment removes slope for ICV ] --- class: inverse, middle, center # Centiloids --- # Centiloids .large[ - Centiloids have become the industry standard standardized measure of amyloid PET - Helpful in multi-site studies where different amyloid PET tracers might be utilized. - What is a centiloid? ] --- # What is a centiloid? Step 1: PiB SUVr to CL .large[ - The original/base PiB SUVr to centiloid map: - 1.009 PiB SUVr (mean in young controls) `\(\rightarrow\)` 0 CL - 2.076 PiB SUVr (mean in AD cases) `\(\rightarrow\)` 100 CL - For other PiB SUVr values, draw the line from (1.009 SUVr, 0 CL) to (2.076 SUVr, 100 CL) - CL = 100 `\(\times\)` (PiB SUVr - 1.009)/1.067 ] --- # What is a centiloid? Step 1: PiB SUVr to CL <img src="data:image/png;base64,#imaging_fig/unnamed-chunk-8-1.svg" width="100%" style="display: block; margin: auto;" /> --- # What is a centiloid? Step 2: Other SUVr to PiB SUVr .large[ - Step 2 requires *paired* data: each individuals scanned with PiB and the other tracer - Linear regression (ordinary least squares) is used to create linear transformation - Transformed data is then mapped to CL using map on prior slide ] --- # What is a centiloid? Step 2: Other SUVr to PiB SUVr <img src="data:image/png;base64,#./images/rowe2017.png" width="75%" style="display: block; margin: auto;" /> `\(\textrm{SUVR}_{\textrm{FBB}} = 0.61 \times \textrm{SUVR}_{\textrm{PiB}} + 0.39\)` --- # Distribution mapping <img src="data:image/png;base64,#./images/properzi2019.png" width="75%" style="display: block; margin: auto;" /> ??? Another approach is normalizing data from different tracers (or fluid assays for that matter) is map distributions. If we only have unpaired data from similar populations, we can map one to other under the assumption that their distributions should have similar shape. --- # Emprical Cumulative Distribution Function (ECDF) <img src="data:image/png;base64,#imaging_fig/unnamed-chunk-11-1.svg" width="100%" style="display: block; margin: auto;" /> ??? CDFs are useful one-to-one maps Underly random number generators. A random number from a uniform 0-1 distribution can be mapped to any other distribution by the inverse CDF. In this case we can map PiB SUVRs to florbetapir SUVRs or vice versa But it only works if samples are similar, and we believe both tracers would sort the samples similarly. --- # Weighted ECDFs to correct for sampling differences N (%) per diagnosis and tracer: <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:left;"> PiB </th> <th style="text-align:left;"> Florbetapir </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> CN </td> <td style="text-align:left;"> 20 (21.5%) </td> <td style="text-align:left;"> 478 (38.2%) </td> </tr> <tr> <td style="text-align:left;"> MCI </td> <td style="text-align:left;"> 49 (52.7%) </td> <td style="text-align:left;"> 568 (45.4%) </td> </tr> <tr> <td style="text-align:left;"> Dementia </td> <td style="text-align:left;"> 24 (25.8%) </td> <td style="text-align:left;"> 206 (16.5%) </td> </tr> </tbody> </table> Inverse proportion weights: <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:right;"> PiB </th> <th style="text-align:right;"> Florbetapir </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> CN </td> <td style="text-align:right;"> 4.7 </td> <td style="text-align:right;"> 2.6 </td> </tr> <tr> <td style="text-align:left;"> MCI </td> <td style="text-align:right;"> 1.9 </td> <td style="text-align:right;"> 2.2 </td> </tr> <tr> <td style="text-align:left;"> Dementia </td> <td style="text-align:right;"> 3.9 </td> <td style="text-align:right;"> 6.1 </td> </tr> </tbody> </table> ??? similar methodology underlies CDC growth charts that provide height and weight percentiles per age --- # Weighted ECDFs to correct for sample differences ```r # Record the sampling adjustment weights in the data dd <- dd %>% mutate( wt = case_when( DX == 'CN' & Tracer == 'PiB' ~ invproptab['CN', 'PiB'], DX == 'MCI' & Tracer == 'PiB' ~ invproptab['MCI', 'PiB'], DX == 'Dementia' & Tracer == 'PiB' ~ invproptab['Dementia', 'PiB'], DX == 'CN' & Tracer == 'Florbetapir' ~ invproptab['CN', 'Florbetapir'], DX == 'MCI' & Tracer == 'Florbetapir' ~ invproptab['MCI', 'Florbetapir'], DX == 'Dementia' & Tracer == 'Florbetapir' ~ invproptab['Dementia', 'Florbetapir'] )) ``` --- # Weighted ECDFs to correct for sample differences ```r # Create adjusted ECDF functions (mapping SUVRs to Cumulative Probabilities) # Hmisc::wtd.Ecdf returns a data.frame evaluating the ECDF at each observed value PiB.ecdf.data <- with(subset(dd, Tracer == 'PiB'), Hmisc::wtd.Ecdf(SUVR, weights=wt, normwt=TRUE)) Fbp.ecdf.data <- with(subset(dd, Tracer == 'Florbetapir'), Hmisc::wtd.Ecdf(SUVR, weights=wt, normwt=TRUE)) # approxfun creates a function via linear interpolation # mapping SUVRs to cumulative probabilities (0 to 1 scale) PiB.ecdf <- with(PiB.ecdf.data, approxfun(x, ecdf, rule=2)) Fbp.ecdf <- with(Fbp.ecdf.data, approxfun(x, ecdf, rule=2)) # Create adjusted **inverse** ECDF functions # mapping Cumulative Probabilities (0 to 1 scale) to SUVRs Probs <- seq(0,1,by=0.01) PiB.inv.ecdf.data <- as.numeric(with(subset(dd, Tracer == 'PiB'), Hmisc::wtd.quantile(SUVR, weights=wt, normwt=TRUE, probs=Probs))) Fbp.inv.ecdf.data <- as.numeric(with(subset(dd, Tracer == 'Florbetapir'), Hmisc::wtd.quantile(SUVR, weights=wt, normwt=TRUE, probs=Probs))) PiB.inv.ecdf <- approxfun(Probs, PiB.inv.ecdf.data, rule=2) Fbp.inv.ecdf <- approxfun(Probs, Fbp.inv.ecdf.data, rule=2) ``` --- # Weighted ECDFs to correct for sample differences ```r dd <- dd %>% mutate( `Adjusted cumulative probability` = case_when( # Tracer == 'PiB' ~ PiB.ecdf(SUVR), Tracer == 'Florbetapir' ~ Fbp.ecdf(SUVR)), `Adjusted Z-score` = qnorm(`Adjusted cumulative probability`), # adjusted z-scores `Florbetapir to PiB adjusted SUVR` = case_when( Tracer == 'Florbetapir' ~ PiB.inv.ecdf(Fbp.ecdf(SUVR))), `PiB to Florbetapir adjusted SUVR` = case_when( Tracer == 'PiB' ~ Fbp.inv.ecdf(PiB.ecdf(SUVR))), CL = case_when( Tracer == 'PiB' ~ 100*(SUVR - 1.009)/1.067)) %>% arrange(Tracer, SUVR) ``` --- # Weighted ECDFs to correct for sample differences <img src="data:image/png;base64,#imaging_fig/weighted-ecdfs-1.svg" width="100%" style="display: block; margin: auto;" /> * solid line is un-adjusted ECDF; dashed line is ECDF adjusted for sample differences --- # Centiloids vs ADNI Percentiles <img src="data:image/png;base64,#imaging_fig/unnamed-chunk-17-1.svg" width="100%" style="display: block; margin: auto;" /> --- # Densities for estimated and actual PiB SUVRs <img src="data:image/png;base64,#imaging_fig/pib-densities-1.svg" width="100%" style="display: block; margin: auto;" /> ??? Not perfectly matched due to different sample characteristics. To be expected. Recall PiB had less representation of CU and Florbetapir had more with dementia --- # Densities by diagnosis <img src="data:image/png;base64,#imaging_fig/pib-densities-dx-1.svg" width="100%" style="display: block; margin: auto;" /> --- # Densities for weighted ECDF derived z-scores <img src="data:image/png;base64,#imaging_fig/z-score-densities-1.svg" width="100%" style="display: block; margin: auto;" /> Useful for analysis, as in ??? Useful for analysis --- # Using the ECDF derived z-scores for analysis .pull-left[ <img src="data:image/png;base64,#./images/li2019.png" width="95%" style="display: block; margin: auto;" /> ] .pull-right[ * ECDF derived z-scores were used in model (assuming Gaussian residuals) * Posterior estimates (on z-score scale) then back transformed to cumulative probabilities * Natural interpretation: * 0 (most healthy) to 1 (most severe) * Comparable across different measures ] --- # Validation on a holdout set with both tracers (FBB `\(\rightarrow\)` PiB) <img src="data:image/png;base64,#imaging_fig/unnamed-chunk-19-1.svg" width="100%" style="display: block; margin: auto;" /> `\(^*\)` Using PiB = (Florbetapir - 0.502)/0.536 from ??? We held out a random sample of 10 participants with both PiB and FBB Note that the linear mapping from Navitsky is estimating PiB values outside of the observed range of actual PiB values (near 0.75). This will never happen with ECDF mapping. --- # Validation on a holdout set with both tracers (PiB `\(\rightarrow\)` FBB) <img src="data:image/png;base64,#imaging_fig/unnamed-chunk-20-1.svg" width="100%" style="display: block; margin: auto;" /> `\(^*\)` Using Florbetapir = PiB `\(\times\)` 0.536 + 0.502 from ??? This type of approach could also be useful for standardizing fluid assays --- # Validation on a holdout set with both tracers (FBB `\(\rightarrow\)` PiB) <img src="data:image/png;base64,#imaging_fig/unnamed-chunk-21-1.svg" width="100%" style="display: block; margin: auto;" /> `\(^*\)` Using PiB = (Florbetapir - 0.503)/0.497 from ??? --- # Validation on a holdout set with both tracers (PiB `\(\rightarrow\)` FBB) <img src="data:image/png;base64,#imaging_fig/unnamed-chunk-22-1.svg" width="100%" style="display: block; margin: auto;" /> `\(^*\)` Using Florbetapir = PiB `\(\times\)` 0.497 + 0.503 from ??? dashed line is FBP threshold of 1.11 --- # Where is linear map struggling? .pull-left[ <img src="data:image/png;base64,#./images/Royse_2021_Fig2.png" width="80%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="data:image/png;base64,#./images/Royse_2021_Fig2_zoom.png" width="70%" style="display: block; margin: auto;" /> ] From --- class: inverse, middle, center # Longitudinal Data --- # Repeated Measures/Longitudinal Data .large[ * In Alzheimer's Disease (AD) studies we typically assess study participants **longitudinally** or **repeatedly** over time * This gives rise to **serial observations** for each participant at various time points post baseline * We cannot treat these serial observations as if they came from different people * Our analysis methods must account for **within-subject correlation** * There are specialized statistical methods to help accommodate many varieties of **correlated** or **clustered** data * We will explore **longitudinal data analysis** approaches commonly employed in AD clinical trials * We will demonstrate these methods on a **simulated** clinical trial dataset ] --- # Repeated Measures/Longitudinal Data ``` Linear mixed-effects model fit by REML Data: ADNIMERGE::adnimerge Subset: M <= 24 & DX.bl == "AD" AIC BIC logLik 7463 7504 -3724 Random effects: Formula: ~M | RID Structure: General positive-definite, Log-Cholesky parametrization StdDev Corr (Intercept) 6.00 (Intr) M 0.37 0.49 Residual 3.28 Fixed effects: ADAS11 ~ PTGENDER + center(AGE) + I(Years.bl * 12) Value Std.Error DF t-value p-value (Intercept) 19.8 0.50 776 40 0.00 PTGENDERMale -0.1 0.66 395 0 0.92 center(AGE) 0.1 0.04 395 1 0.18 I(Years.bl * 12) 0.4 0.02 776 16 0.00 Correlation: (Intr) PTGEND c(AGE) PTGENDERMale -0.747 center(AGE) 0.075 -0.086 I(Years.bl * 12) 0.108 -0.001 0.014 Standardized Within-Group Residuals: Min Q1 Med Q3 Max -2.412 -0.435 -0.043 0.399 2.434 Number of Observations: 1175 Number of Groups: 398 ``` --- # Simulating a hypothetical clinical trial `\(\ldots\)` .large[ * Two groups: placebo vs active (hypothetical) * `\(n=200\)` mild to moderate dementia subjects per group * Alzheimer's Disease Assessment Scale (ADAS-Cog) assessed at 0, 6, 12, 18 months * Placebo group behaves like ADNI participants * Weak effects for age and sex (based on ADNI pilot estimates) * A treatment which slows ADAS-Cog progression by 12% * Typical attrition (about 30%) ] --- # Simulating a hypothetical clinical trial `\(\ldots\)` .large[ Simulation **reverses** the usual process of statistical modeling/estimation * Model fitting: Data + Model `\(\rightarrow\)` Parameter Estimates * Model simulation: Model + Parameter Estimates `\(\rightarrow\)` Pseudo Data * Given a reasonable model, everything can be simulated: mean, variance, missingness, etc. * CAUTION: Simulations can only provide information about **models**, but they cannot provide information about **reality**. **Real data** is required for the latter. ] --- # Simulating a hypothetical clinical trial `\(\ldots\)` These are all estimates required: ```r # fixed effects parameters estimated from ADNI Beta <- c( '(Intercept)'=20 , # mean ADAS at baseline 'female'=0.1, # worse scores for females 'age_c'=0.1, # worse change for older at baseline (age mean centered) 'month'=0.4, # worse per month post baseline 'month:active'=-0.05) # improvement per month with treatment # standard deviations for random effects sigma_random_intercept <- 6.0 sigma_random_slope <- 0.37 sigma_residual <- 3.3 # other design parameters months <- c(0, 6, 12, 18) n <- 200 # per group attrition_rate <- 0.40/18 # approx per month ``` --- # The pseudo data snapshot <table> <thead> <tr> <th style="text-align:right;"> id </th> <th style="text-align:right;"> month </th> <th style="text-align:right;"> active </th> <th style="text-align:right;"> female </th> <th style="text-align:right;"> age </th> <th style="text-align:right;"> censor </th> <th style="text-align:right;"> ran.intercept </th> <th style="text-align:right;"> ran.slope </th> <th style="text-align:right;"> age_c </th> <th style="text-align:left;"> Female </th> <th style="text-align:right;"> residual </th> <th style="text-align:right;"> ADAS11 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 66 </td> <td style="text-align:right;"> 69 </td> <td style="text-align:right;"> 8.7 </td> <td style="text-align:right;"> 0.37 </td> <td style="text-align:right;"> -8.7 </td> <td style="text-align:left;"> Male </td> <td style="text-align:right;"> 0.43 </td> <td style="text-align:right;"> 28 </td> </tr> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 66 </td> <td style="text-align:right;"> 69 </td> <td style="text-align:right;"> 8.7 </td> <td style="text-align:right;"> 0.37 </td> <td style="text-align:right;"> -8.7 </td> <td style="text-align:left;"> Male </td> <td style="text-align:right;"> -1.55 </td> <td style="text-align:right;"> 31 </td> </tr> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 66 </td> <td style="text-align:right;"> 69 </td> <td style="text-align:right;"> 8.7 </td> <td style="text-align:right;"> 0.37 </td> <td style="text-align:right;"> -8.7 </td> <td style="text-align:left;"> Male </td> <td style="text-align:right;"> 2.36 </td> <td style="text-align:right;"> 39 </td> </tr> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 18 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 66 </td> <td style="text-align:right;"> 69 </td> <td style="text-align:right;"> 8.7 </td> <td style="text-align:right;"> 0.37 </td> <td style="text-align:right;"> -8.7 </td> <td style="text-align:left;"> Male </td> <td style="text-align:right;"> 3.66 </td> <td style="text-align:right;"> 44 </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 88 </td> <td style="text-align:right;"> 51 </td> <td style="text-align:right;"> -1.7 </td> <td style="text-align:right;"> -0.17 </td> <td style="text-align:right;"> 13.1 </td> <td style="text-align:left;"> Female </td> <td style="text-align:right;"> -1.02 </td> <td style="text-align:right;"> 19 </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 88 </td> <td style="text-align:right;"> 51 </td> <td style="text-align:right;"> -1.7 </td> <td style="text-align:right;"> -0.17 </td> <td style="text-align:right;"> 13.1 </td> <td style="text-align:left;"> Female </td> <td style="text-align:right;"> 5.49 </td> <td style="text-align:right;"> 26 </td> </tr> </tbody> </table> --- # The pseudo data: Baseline characteristics <table> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:left;"> placebo (N=200) </th> <th style="text-align:left;"> active (N=200) </th> <th style="text-align:left;"> Total (N=400) </th> <th style="text-align:left;"> p value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Female </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> 0.764 </td> </tr> <tr> <td style="text-align:left;"> - Female </td> <td style="text-align:left;"> 106 (53.0%) </td> <td style="text-align:left;"> 103 (51.5%) </td> <td style="text-align:left;"> 209 (52.2%) </td> <td style="text-align:left;"> </td> </tr> <tr> <td style="text-align:left;"> - Male </td> <td style="text-align:left;"> 94 (47.0%) </td> <td style="text-align:left;"> 97 (48.5%) </td> <td style="text-align:left;"> 191 (47.8%) </td> <td style="text-align:left;"> </td> </tr> <tr> <td style="text-align:left;"> age </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> 0.689 </td> </tr> <tr> <td style="text-align:left;"> - Mean (SD) </td> <td style="text-align:left;"> 74.716 (7.936) </td> <td style="text-align:left;"> 75.036 (8.039) </td> <td style="text-align:left;"> 74.876 (7.979) </td> <td style="text-align:left;"> </td> </tr> <tr> <td style="text-align:left;"> - Range </td> <td style="text-align:left;"> 53.884 - 97.940 </td> <td style="text-align:left;"> 57.228 - 96.349 </td> <td style="text-align:left;"> 53.884 - 97.940 </td> <td style="text-align:left;"> </td> </tr> <tr> <td style="text-align:left;"> ADAS11 </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> 0.386 </td> </tr> <tr> <td style="text-align:left;"> - Mean (SD) </td> <td style="text-align:left;"> 20.725 (7.002) </td> <td style="text-align:left;"> 20.135 (6.576) </td> <td style="text-align:left;"> 20.430 (6.790) </td> <td style="text-align:left;"> </td> </tr> <tr> <td style="text-align:left;"> - Range </td> <td style="text-align:left;"> 5.000 - 44.000 </td> <td style="text-align:left;"> 3.000 - 37.000 </td> <td style="text-align:left;"> 3.000 - 44.000 </td> <td style="text-align:left;"> </td> </tr> </tbody> </table> --- # The pseudo data: Spaghetti plot <img src="data:image/png;base64,#imaging_fig/spaghetti_plot-1.svg" width="100%" style="display: block; margin: auto;" /> --- # Basic longitudinal summaries of ADAS11 <table> <thead> <tr> <th style="text-align:left;"> group </th> <th style="text-align:right;"> month </th> <th style="text-align:right;"> n </th> <th style="text-align:right;"> mean </th> <th style="text-align:right;"> sd </th> <th style="text-align:right;"> lower95 </th> <th style="text-align:right;"> upper95 </th> <th style="text-align:right;"> min </th> <th style="text-align:right;"> max </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;vertical-align: middle !important;" rowspan="4"> placebo </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 200 </td> <td style="text-align:right;"> 21 </td> <td style="text-align:right;"> 7.0 </td> <td style="text-align:right;"> 20 </td> <td style="text-align:right;"> 22 </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 44 </td> </tr> <tr> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 180 </td> <td style="text-align:right;"> 23 </td> <td style="text-align:right;"> 7.2 </td> <td style="text-align:right;"> 22 </td> <td style="text-align:right;"> 24 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 43 </td> </tr> <tr> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> 163 </td> <td style="text-align:right;"> 26 </td> <td style="text-align:right;"> 7.8 </td> <td style="text-align:right;"> 25 </td> <td style="text-align:right;"> 27 </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 51 </td> </tr> <tr> <td style="text-align:right;"> 18 </td> <td style="text-align:right;"> 149 </td> <td style="text-align:right;"> 29 </td> <td style="text-align:right;"> 8.9 </td> <td style="text-align:right;"> 28 </td> <td style="text-align:right;"> 31 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 55 </td> </tr> <tr> <td style="text-align:left;vertical-align: middle !important;" rowspan="4"> active </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 200 </td> <td style="text-align:right;"> 20 </td> <td style="text-align:right;"> 6.6 </td> <td style="text-align:right;"> 19 </td> <td style="text-align:right;"> 21 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 37 </td> </tr> <tr> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 180 </td> <td style="text-align:right;"> 22 </td> <td style="text-align:right;"> 7.3 </td> <td style="text-align:right;"> 21 </td> <td style="text-align:right;"> 23 </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 39 </td> </tr> <tr> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> 158 </td> <td style="text-align:right;"> 25 </td> <td style="text-align:right;"> 8.1 </td> <td style="text-align:right;"> 23 </td> <td style="text-align:right;"> 26 </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 45 </td> </tr> <tr> <td style="text-align:right;"> 18 </td> <td style="text-align:right;"> 142 </td> <td style="text-align:right;"> 27 </td> <td style="text-align:right;"> 9.4 </td> <td style="text-align:right;"> 25 </td> <td style="text-align:right;"> 28 </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 54 </td> </tr> </tbody> </table> --- # Mean ADAS <img src="data:image/png;base64,#imaging_fig/meanplot-1.svg" width="100%" style="display: block; margin: auto;" /> --- # Basic longitudinal summaries of ADAS11 _change_ <table> <thead> <tr> <th style="text-align:left;"> group </th> <th style="text-align:right;"> month </th> <th style="text-align:right;"> n </th> <th style="text-align:right;"> mean </th> <th style="text-align:right;"> sd </th> <th style="text-align:right;"> lower95 </th> <th style="text-align:right;"> upper95 </th> <th style="text-align:right;"> min </th> <th style="text-align:right;"> max </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;vertical-align: middle !important;" rowspan="4"> placebo </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 200 </td> <td style="text-align:right;"> 0.0 </td> <td style="text-align:right;"> 0.0 </td> <td style="text-align:right;"> 0.0 </td> <td style="text-align:right;"> 0.0 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 180 </td> <td style="text-align:right;"> 2.3 </td> <td style="text-align:right;"> 5.0 </td> <td style="text-align:right;"> 1.6 </td> <td style="text-align:right;"> 3.0 </td> <td style="text-align:right;"> -14 </td> <td style="text-align:right;"> 19 </td> </tr> <tr> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> 163 </td> <td style="text-align:right;"> 5.3 </td> <td style="text-align:right;"> 6.6 </td> <td style="text-align:right;"> 4.3 </td> <td style="text-align:right;"> 6.3 </td> <td style="text-align:right;"> -10 </td> <td style="text-align:right;"> 24 </td> </tr> <tr> <td style="text-align:right;"> 18 </td> <td style="text-align:right;"> 149 </td> <td style="text-align:right;"> 8.3 </td> <td style="text-align:right;"> 8.0 </td> <td style="text-align:right;"> 7.0 </td> <td style="text-align:right;"> 9.6 </td> <td style="text-align:right;"> -11 </td> <td style="text-align:right;"> 28 </td> </tr> <tr> <td style="text-align:left;vertical-align: middle !important;" rowspan="4"> active </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 200 </td> <td style="text-align:right;"> 0.0 </td> <td style="text-align:right;"> 0.0 </td> <td style="text-align:right;"> 0.0 </td> <td style="text-align:right;"> 0.0 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 180 </td> <td style="text-align:right;"> 2.2 </td> <td style="text-align:right;"> 4.9 </td> <td style="text-align:right;"> 1.5 </td> <td style="text-align:right;"> 2.9 </td> <td style="text-align:right;"> -10 </td> <td style="text-align:right;"> 13 </td> </tr> <tr> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> 158 </td> <td style="text-align:right;"> 4.6 </td> <td style="text-align:right;"> 6.1 </td> <td style="text-align:right;"> 3.6 </td> <td style="text-align:right;"> 5.6 </td> <td style="text-align:right;"> -11 </td> <td style="text-align:right;"> 18 </td> </tr> <tr> <td style="text-align:right;"> 18 </td> <td style="text-align:right;"> 142 </td> <td style="text-align:right;"> 6.5 </td> <td style="text-align:right;"> 8.2 </td> <td style="text-align:right;"> 5.2 </td> <td style="text-align:right;"> 7.9 </td> <td style="text-align:right;"> -15 </td> <td style="text-align:right;"> 27 </td> </tr> </tbody> </table> --- # Mean ADAS change (95% CI) <img src="data:image/png;base64,#imaging_fig/meanchplot-1.svg" width="100%" style="display: block; margin: auto;" /> --- class: inverse, middle, center # `\(t\)`-test --- # Two sample `\(t\)`-test of mean change at month 18 ## (completers analysis) .large[ * Difference between group means is 8.34 - 6.51 = 1.83 * (pooled) standard deviation is 8.11 * `\(t = \frac{1.83}{8.11\sqrt{\frac{1}{149} + \frac{1}{142}}} = 1.92\)` * 149 + 142 - 2 = 289 _degrees of freedom_ ] --- # `\(t\)`-test ``` Two Sample t-test data: ADAS11.ch by group t = 1.923, df = 289, p-value = 0.0555 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -0.0429371 3.6993319 sample estimates: mean in group placebo mean in group active 8.34228 6.51408 ``` --- # The `\(t_{289}\)`-distribution `\(p\)`-value is area under curve for `\(|x|>1.92\)`, the value of the test statistic in this case. This area is depicted in blue here (area = `\(p\)` = 0.055). <img src="data:image/png;base64,#imaging_fig/unnamed-chunk-33-1.svg" width="100%" style="display: block; margin: auto;" /> --- class: inverse, middle, center # Regression --- # Regression analysis .large[ * **Regression** generally refers to a relationship between variables that is estimated by data * **Ordinary Least Squares** regression, for example, describes a linear relationship between two continuous variables that is estimated by the line that minimizes the sum of squared "residuals" * **predictor/covariate** `\(\rightarrow\)` **response/outcome** * **Residuals** are the differences between observations and values predicted by the regression ] --- # Other types of regression .large[ * **General linear models** can add multiple **covariates/predictors** * **Generalized linear models** can accommodate other types of **outcome/response** variables (e.g. logistic regression can accommodate binary outcome variables) * **Mixed-effects models** mix **random effects** with the standard **fixed effects** to account for complex correlation structures All regression models share the common theme of estimating the best fit relationship between **outcome/response** variables and **covariates/predictors** under some assumptions. ] --- class: inverse, middle, center # ANCOVA --- # ANalysis of COVAriance (ANCOVA) for "pre-post" data * Very common for two groups, and **one** post- assessment * `\(\textrm{ADAS}_{i1}\)`: baseline or pre- observation for subject `\(i\)`, `\(i=1,\dots,200\)` * `\(\textrm{ADAS}_{i2}\)`: followup or post- observation for subject `\(i\)`, `\(i=1,\dots,200\)` * `\(\textrm{Active}_i\)`: treatment group indicator (e.g. 1 if active, 0 if placebo) * _ANCOVA I_: `\(\textrm{ADAS}_{i2} = \beta_0 + \textrm{Active}_i\beta_1 + \textrm{ADAS}_{i1}\beta_2 + \varepsilon_i\)` * `\(\beta_0\)` is the _intercept_ * `\(\beta_1\)` is the estimate of interest: group difference at 18 months * `\(\beta_2\)` controls for baseline ADAS * `\(\varepsilon_i\)` is residual error * _ANCOVA II_: `\(\textrm{ADAS}_{i2} = \beta_0 + \textrm{Active}_i\beta_1 + \textrm{ADAS}_{i1}^*\beta_2 + \textrm{Active}_i\textrm{ADAS}_{i1}^*\beta_3 + \varepsilon_i\)` * `\(\beta_3\)` controls for interaction of treatment assignment and baseline ADAS * _Need to mean center baseline covariates_: `\(\textrm{ADAS}_{i1}^* = \textrm{ADAS}_{i1} - \bar{Y}_{\cdot0}\)` * More efficient (statistical power) * "ANCOVA I model also fully efficient if the randomization probability to the treatment arm is 0.5 or when the covariance between the baseline and follow-up responses is the same for both the treatment and control groups" --- # ANCOVA I for effect of treatment on ADAS11 at 18 months ``` Call: lm(formula = ADAS11.ch ~ active + ADAS11.m0, data = trial_mmrm) Residuals: Min 1Q Median 3Q Max -18.113 -4.546 -0.488 4.336 24.358 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 10.0163 0.7316 13.69 < 2e-16 *** active -1.0217 0.4270 -2.39 0.017 * ADAS11.m0 -0.2353 0.0321 -7.32 5.2e-13 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 6.7 on 969 degrees of freedom Multiple R-squared: 0.0562, Adjusted R-squared: 0.0543 F-statistic: 28.9 on 2 and 969 DF, p-value: 6.71e-13 ``` --- # ANCOVA II for effect of treatment on ADAS11 at 18 months ``` Call: lm(formula = ADAS11.ch ~ active * center(ADAS11.m0), data = trial_mmrm) Residuals: Min 1Q Median 3Q Max -18.318 -4.453 -0.436 4.304 24.069 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 5.2199 0.3000 17.40 < 2e-16 *** active -1.0203 0.4269 -2.39 0.017 * center(ADAS11.m0) -0.2739 0.0445 -6.15 1.1e-09 *** active:center(ADAS11.m0) 0.0805 0.0643 1.25 0.211 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 6.7 on 968 degrees of freedom Multiple R-squared: 0.0577, Adjusted R-squared: 0.0548 F-statistic: 19.8 on 3 and 968 DF, p-value: 1.92e-12 ``` --- # ANCOVA II with more covariates ``` Call: lm(formula = ADAS11.ch ~ active * center(ADAS11.m0) + female + age_c, data = trial_mmrm) Residuals: Min 1Q Median 3Q Max -19.306 -4.497 -0.398 4.314 23.719 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 4.9185 0.3770 13.05 < 2e-16 *** active -1.0587 0.4254 -2.49 0.013 * center(ADAS11.m0) -0.2869 0.0446 -6.44 1.9e-10 *** female 0.5765 0.4266 1.35 0.177 age_c 0.0758 0.0269 2.81 0.005 ** active:center(ADAS11.m0) 0.0901 0.0642 1.40 0.161 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 6.6 on 966 degrees of freedom Multiple R-squared: 0.0671, Adjusted R-squared: 0.0623 F-statistic: 13.9 on 5 and 966 DF, p-value: 3.87e-13 ``` --- # ANCOVA summary .large[ * Familiar, simple, powerful framework * ANCOVA more powerful/efficient than `\(t\)`-test * Both are inherently **complete case** analyses! * With missing data, not intention-to-treat (ITT) analysis * Might be biased and/or inefficient (low power) with missing data ] --- class: inverse, middle, center # Two-stage models --- # Two-stage models .large[ * _Subject-specific_ longitudinal profiles can often be modeled with simple linear regression * This leads to the 2-stage model: * _Stage 1_: Linear regression model for each subject separately * _Stage 2_: Model subject-specific regression coefficients with covariates of interest * However, this is **NOT** a recommend analysis approach, but rather a means to introduce mixed-effect models. ] --- # Two-stage model example .large[ * _Stage 1_: `\(\textrm{ADAS}_{ij} = \beta_{0i} + t_{ij}\beta_{1i} + \varepsilon_i\)` for subject `\(i\)` at time `\(t_{ij}\)` * Provides estimates of subject-specific intercepts, `\(\hat\beta_{0i}\)` and slopes `\(\hat\beta_{0i}\)` * `\(\varepsilon_i \sim \mathcal{N}(0,\sigma^2_iI_{n_i})\)` estimates _within_-subject variability * _Between_-subject variability can now be modeled by treating `\(\hat\beta_i\)` as "response variables" * _Stage 2_: `\(\hat\beta_{1i} = X_i\beta + \varepsilon'_i\)` ] --- # Stage 1 models of simulated trial <img src="data:image/png;base64,#imaging_fig/trial_stage1_plot-1.svg" width="100%" style="display: block; margin: auto;" /> --- # Stage 1 model of simulated trial <table> <thead> <tr> <th style="text-align:right;"> id </th> <th style="text-align:right;"> beta.(Intercept) </th> <th style="text-align:right;"> beta.month </th> <th style="text-align:right;"> sigma </th> <th style="text-align:right;"> active </th> <th style="text-align:left;"> group </th> <th style="text-align:right;"> age_c </th> <th style="text-align:right;"> female </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 27 </td> <td style="text-align:right;"> 0.93 </td> <td style="text-align:right;"> 1.4 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> active </td> <td style="text-align:right;"> -8.7 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:right;"> 2 </td> <td style="text-align:right;"> 19 </td> <td style="text-align:right;"> 0.70 </td> <td style="text-align:right;"> 4.0 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> active </td> <td style="text-align:right;"> 13.1 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> NaN </td> <td style="text-align:right;"> 0 </td> <td style="text-align:left;"> placebo </td> <td style="text-align:right;"> -17.3 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> -0.17 </td> <td style="text-align:right;"> NaN </td> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> active </td> <td style="text-align:right;"> 8.5 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 20 </td> <td style="text-align:right;"> 0.17 </td> <td style="text-align:right;"> 3.3 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> active </td> <td style="text-align:right;"> -15.3 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 18 </td> <td style="text-align:right;"> NA </td> <td style="text-align:right;"> NaN </td> <td style="text-align:right;"> 1 </td> <td style="text-align:left;"> active </td> <td style="text-align:right;"> 4.2 </td> <td style="text-align:right;"> 1 </td> </tr> </tbody> </table> ??? NAs are from too few observations due to missing data --- # Stage 1 model of simulated trial ``` Call: lm(formula = ADAS11 ~ month, data = trial_obs, subset = id == 1) Residuals: 1 2 3 4 0.9 -1.7 0.7 0.1 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 27.100 1.212 22.35 0.002 ** month 0.933 0.108 8.64 0.013 * --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 1.4 on 2 degrees of freedom Multiple R-squared: 0.974, Adjusted R-squared: 0.961 F-statistic: 74.7 on 1 and 2 DF, p-value: 0.0131 ``` --- # Stage 2 model of simulated trial <img src="data:image/png;base64,#imaging_fig/trial_plot_stage2-1.svg" width="100%" style="display: block; margin: auto;" /> --- # Stage 2 model of simulated trial ``` Call: lm(formula = beta.month ~ female + age_c + active, data = trial_stage1) Residuals: Min 1Q Median 3Q Max -2.508 -0.313 0.057 0.353 1.846 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.38692 0.05039 7.68 1.6e-13 *** female -0.00358 0.05694 -0.06 0.95 age_c 0.00378 0.00356 1.06 0.29 active -0.03054 0.05688 -0.54 0.59 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.54 on 356 degrees of freedom (40 observations deleted due to missingness) Multiple R-squared: 0.0039, Adjusted R-squared: -0.00449 F-statistic: 0.465 on 3 and 356 DF, p-value: 0.707 ``` --- # Two-stage models .large[ * In contrast to ANCOVA and `\(t\)`-test, two-stage models allow all randomized subject with at least one followup to be included into analysis ("*modified intention-to-treat*") * However, second stage models ignore the variability/uncertainty of the slope estimates from the first stage * This means that `\(p\)`-values from second stage might be smaller than they should be and Type I error could be inflated ] --- # Summary .large[ * Avoid using ratios whenever possible. Better to include "denominators" as covariates in regression models. * The Empirical Cumulative Distribution Function (ECDF) is a useful non-parametric tool for standardization. * Can handle non-linear relationships * Percentiles are intuitive and familiar * ECDF derived maps will not produce out-of-range estimates * Percentiles can be mapped to standard normal `\(z\)`-scores to facilitate modelling * Introduction to longitudinal data analysis * Plots, summaries, `\(t\)`-test, regression, ANCOVA, two-stage models ] --- # References (1/2) Klunk, W. E., R. A. Koeppe, J. C. Price, T. L. Benzinger, M. D. Devous Sr, W. J. Jagust, K. A. Johnson, C. A. Mathis, D. Minhas, M. J. Pontecorvo, et al. (2015). "The Centiloid Project: standardizing quantitative amyloid plaque estimation by PET". In: _Alzheimer's & dementia_ 11.1, pp. 1-15. Kronmal, R. A. (1993). "Spurious correlation and the fallacy of the ratio standard revisited". In: _Journal of the Royal Statistical Society: Series A (Statistics in Society)_ 156.3, pp. 379-392. Li, D., S. Iddi, W. K. Thompson, M. C. Donohue, and Alzheimer’s Disease Neuroimaging Initiative (2019). "Bayesian latent time joint mixed effect models for multicohort longitudinal data". In: _Statistical methods in medical research_ 28.3, pp. 835-845. Navitsky, M., A. D. Joshi, I. Kennedy, W. E. Klunk, C. C. Rowe, D. F. Wong, M. J. Pontecorvo, M. A. Mintun, and M. D. Devous Sr (2018). "Standardization of amyloid quantitation with florbetapir standardized uptake value ratios to the Centiloid scale". In: _Alzheimer's & Dementia_ 14.12, pp. 1565-1571. Properzi, M. J., R. F. Buckley, J. P. Chhatwal, M. C. Donohue, C. Lois, E. C. Mormino, K. A. Johnson, R. A. Sperling, and A. P. Schultz (2019). "Nonlinear Distributional Mapping (NoDiM) for harmonization across amyloid-PET radiotracers". In: _Neuroimage_ 186, pp. 446-454. Rowe, C. C., V. Doré, G. Jones, D. Baxendale, R. S. Mulligan, S. Bullich, A. W. Stephens, S. De Santi, C. L. Masters, L. Dinkelborg, et al. (2017). "18 F-Florbetaben PET beta-amyloid binding expressed in Centiloids". In: _European journal of nuclear medicine and molecular imaging_ 44.12, pp. 2053-2059. --- # References (2/2) Royse, S. K. et al. (2021). "Validation of amyloid PET positivity thresholds in centiloids: a multisite PET study approach". In: _Alzheimer's Research & Therapy_ 13.1, pp. 1-10. Yang, L. et al. (2001). "Efficiency study of estimators for a treatment effect in a pretest-posttest trial". In: _The American Statistician_ 55.4, pp. 314-321.